<#-- 计算出需要导入的import -->
<#assign primaryKeyType = columns?filter(column -> column.primary)?first.javaType>
<#--  拿到主键类型 -->
package ${packageName}.controllers;

import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;
import vip.liux.application.dots.ListResultDto;
import vip.liux.application.dots.PagedResultDto;
import ${packageName}.service.*;

/**
 * ${className}控制器
 * 提供${className}实体的REST API接口
 */
@RestController
@RequestMapping("/api/${className?uncap_first}s")
public class ${className}Controller {

private final ${className}Service service;

public ${className}Controller(${className}Service service) {
this.service = service;
}

/**
* 分页查询${className}实体列表
* @param input 分页查询参数
* @return 分页结果Dto
*/
@GetMapping
public PagedResultDto
<${className}Dto> pageList(Query${className}Dto input) {
    return service.pageList(input);
    }

    /**
     * 创建${className}实体
     * @param input 创建所需的数据传输对象
    * @return 创建成功后的实体Dto
     */
    @PostMapping
    public ${className}Dto save(@Valid @RequestBody Create${className}Dto input) {
    return service.save(input);
    }

    /**
     * 获取所有${className}实体列表
    * @return 所有实体的Dto列表
     */
    @GetMapping("/all")
    public ListResultDto
    <${className}Dto> allList() {
        return service.allList();
        }

        /**
        * 查询${className}实体列表
        * @param input 查询参数
        * @return 分页结果Dto
        */
        @GetMapping("/list")
        public ListResultDto
        <${className}Dto> list(Query${className}Dto input) {
            return service.list(input);
    }

    /**
     * 根据ID获取${className}实体详情
     * @param id 实体ID
            * @return 实体详情Dto
     */
    @GetMapping("/{id}")
            public ${className}Dto detail(@PathVariable ${primaryKeyType} id) {
            return service.detail(id);
    }

    /**
     * 更新${className}实体
     * @param id 要更新的实体ID
     * @param input 更新数据传输对象
            * @return 更新后的实体Dto
     */
    @PutMapping("/{id}")
            public ${className}Dto update(@PathVariable ${primaryKeyType} id, @Valid @RequestBody Update${className}Dto
            input) {
            return service.update(id, input);
    }

    /**
     * 删除${className}实体
     * @param id 要删除的实体ID
     */
    @DeleteMapping("/{id}")
    public void delete(@PathVariable ${primaryKeyType} id) {
            service.detail(id);
    }
}
